const Koa = require('koa');

const serveStaticPlugin = require('./serverPluginServeStatic');
const moduleRewritePlugin = require('./serverPluginModuleRewrite');
const moduleResolvePlugin = require('./serverPluginModuleResolve');
const vuePlugin = require('./serverPluginVue');
const htmlRewritePlugin = require('./serverPluginHtml');

function createServer() {
    const app = new Koa();
    const root = process.cwd(); // 当前命令执行的路径

    // 构建上下文对象
    const context = { app, root };
    // 插件集合(顺序要注意)
    const resolvedPlugins = [
        htmlRewritePlugin, // 5, 处理 process 
        moduleRewritePlugin, // 2, 重写请求路径
        moduleResolvePlugin, // 3, 处理重写请求的路径的文件 /@modules
        vuePlugin, // 4, 解析 .vue 的文件，使得浏览器认识
        serveStaticPlugin // 1, 静态服务
    ];

    app.use((ctx, next) => {
        // 扩展 ctx 属性
        Object.assign(ctx, context);
        return next();
    });

    // 依次注册所有插件
    resolvedPlugins.forEach(plugin => plugin(context));
    return app;
}

createServer().listen(9999, () => {
    console.log('Vite Serve Start Port: 9999');
});